home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / shell / sokudo / src / main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-22  |  7.0 KB  |  287 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <winb.h>
  5. #include <te.h>
  6. #include <fntb.h>
  7. #include <gui.h>
  8. #include <egb.h>
  9. #include <guidbg.h>
  10.  
  11. char    *guiEgbPtr ;            /*    EGB のワークアドレス    */
  12.  
  13. int    DialogID = -1 ;
  14. int    TIconID = -1 ;
  15. int    MessageID = -1 ;
  16. int    IconID = -1 ;
  17.  
  18. #include <eintm.h>
  19. #include <msdos.cf>
  20.  
  21. /*= リジューム用設定=================================================*/
  22. FRAME    RSM_FRAME;
  23. char    RSMID[]="%%% 速度 %%%";
  24. char    RSMTITLE[]="速度                            By 機拡";
  25.  
  26. int    quitFuncRet = ILLEGAL_FUNCTION ;
  27. int    mode = 1;                        //    mode 0:Normal 1:Fast
  28. int sleepFlag = FALSE;
  29.  
  30. int userFunc(apliId, messId, info, data)
  31. int    apliId;
  32. int    messId;
  33. int    info;
  34. int    data;
  35. {
  36.     register int    ret;
  37.  
  38.     ret = ILLEGAL_FUNCTION;
  39.  
  40.     switch(messId)
  41.     {
  42.         case    GM_QUIT :
  43.         case    GM_PURGE :
  44. //            printf("終了\n");
  45.             MMI_SendMessage( IconID, MM_EXEC, 2, 0, 0 );
  46.             ret = quitFuncRet ;
  47.             break;
  48.         case    GM_WAKE :
  49. //            printf("起きる\n");
  50.             MMI_SendMessage( DialogID, MM_ENABLE, 1, TRUE);
  51.             MMI_SendMessage( DialogID, MM_SHOW, 0);
  52.             sleepFlag = TRUE;
  53.             break;
  54.         case    GM_SLEEP :
  55.             if(sleepFlag==TRUE){
  56. //                printf("寝る\n");
  57.                 MMI_SendMessage( DialogID, MM_ENABLE, 1, FALSE);
  58.                 MMI_SendMessage( DialogID, MM_SHOW, 0);
  59.             }
  60. //            else printf("寝れない\n");
  61.             break;
  62.  
  63.         default : break;
  64.     }
  65.  
  66.     return(ret);
  67. }
  68.  
  69. void main()
  70. {
  71.     static MMICTRL mmi ={
  72.                 SCREEN16 | SCREENIGNORE,    // ページ0側解像度
  73.                 SCREENUNUSED,                // ページ1側解像度
  74.                 0,                             // 書き込みページ
  75.                 SCREENAVAILABLE,             // 表示ページ
  76.                 0,                             // 表示プライオリティ
  77.                 SCREENAVAILABLE,            // 色数
  78.                 SCREENEXPAND,                 // VRAMの横の長さ
  79.                 0,                             // メモリ領域の大きさ
  80.                 NULL,                         // メモリ領域のアドレス
  81.                 0,                             // ユーザ領域の大きさ
  82.                 NULL,                         // ユーザ領域のアドレス
  83.                 0, 0,                         // 画面枠    lupx,lupy
  84.                 0, 0,                        //            rdwx,rdwy
  85.                 -16384, -16384,                // 移動枠    lupx,lupy
  86.                 16383, 16383,                //            rdwx,rdwy
  87.                 15,                         // 白色
  88.                 8,                          // 黒色
  89.                 7,                          // 灰色
  90.                 6                             // 反転色
  91.     };
  92.  
  93.     extern int APL_init() ;
  94.     extern int APL_end() ;
  95.  
  96.     /*    初期化処理    */
  97.     if (MMI_Open( &mmi ) == NOERR)
  98.     {
  99.         /*    初期化に成功すればメインループに入る.    */
  100.         if (APL_init() == NOERR){
  101.             MMI_ExecSystem() ;
  102.             APL_end();
  103.         }
  104.     }
  105.  
  106.     /*    終了処理    */
  107.     MMI_Close() ;
  108.  
  109. }
  110.  
  111. int APL_init()
  112. {
  113.     extern MMIINIT    initDataGUI ;
  114.  
  115.     register int    ret ;
  116.  
  117.     /*    EGB ワークアドレスの取得.    */
  118.     guiEgbPtr = MMI_GetEgbPtr() ;
  119.  
  120.     /*    ハイパ型部品の初期化            */
  121.     if ((ret = MMI_initHyper()) < 0)
  122.         return ret ;
  123.     /*    ダイアログ型部品の初期化        */
  124.     if ((ret = MMI_initDialogL40()) < 0)
  125.         return ret ;
  126.     /*    メッセージ型部品の初期化        */
  127.     if ((ret = MMI_initMessageL40()) < 0)
  128.         return ret ;
  129.     /*    ボタン型部品の初期化            */
  130.     if ((ret = MMI_initButtonL40()) < 0)
  131.         return ret ;
  132.     /*    アイコンボタン型部品の初期化    */
  133.     if ((ret = MMI_initIconL40()) < 0)
  134.         return ret ;
  135.     /*    トグルアイコン型部品の初期化    */
  136.     if ((ret = MMI_initToggleIconL40()) < 0)
  137.         return ret ;
  138.  
  139.     /*    背景データの初期化                        */
  140.  
  141.     /*    データの登録        */
  142.     if ((ret = MMI_Init(&initDataGUI)) < 0)
  143.         return ret ;
  144.  
  145.     /*    Tmenuにパレットを合わせる    */
  146.     EIN_initGuiColor();
  147.  
  148.     /*----------------------------------------------------------------*/
  149.     /*  リジューム読み込み (※のついた処理は必ず行ってください)       */
  150.     /*----------------------------------------------------------------*/
  151.     char    work[RSMWORKSIZE];    // リジュームマネージャのワークエリア
  152.     char    buf[200];
  153.     char    *ptr;
  154.     int        size, x, y;
  155.     HYPER    hyp;
  156.  
  157.     // リジュームマネージャの初期化
  158.     EIN_rsmInit( work, RSMID );
  159.     // 読み込みバッファ設定
  160.     EIN_rsmBufSet( work, buf, 200 );
  161.     // リジューム情報読み込み
  162.     size = EIN_rsmLoad( work );
  163.     #ifdef DEBUG
  164.     printf(" resume size(%d)\n",size);
  165.     #endif
  166.     if ( size > 0 ){
  167.         // 表示位置
  168.         if ( ((ptr = strstr(buf,"\nPANEL: ")) != NULL ) &&
  169.              (sscanf(ptr,"\nPANEL: %d %d\n", &x, &y) > 1 ) ){
  170.             // 枠座標を得る
  171.             MMI_SendMessage( DialogID, MM_GETHYPER, 1, &hyp );
  172.             RSM_FRAME.lupx = x;
  173.             RSM_FRAME.lupy = y;
  174.             RSM_FRAME.rdwx = x+(hyp.fr.rdwx-hyp.fr.lupx);
  175.             RSM_FRAME.rdwy = y+(hyp.fr.rdwy-hyp.fr.lupy);
  176.             #ifdef DEBUG
  177.             printf("PANEL: move to (%d,%d)\n", x, y);
  178.             #endif
  179.             MMI_SendMessage( DialogID, MM_MOVE, 1, &RSM_FRAME ) ;
  180.         }
  181.     } else {
  182.         #ifdef DEBUG
  183.         printf("Can't find resume file.\n");
  184.         #endif
  185.     }
  186.  
  187.     //起動時はFASTモードにする
  188.     Registers.AX.LH.H = 0x08 ;
  189.     Registers.AX.LH.L = 1 ;
  190.     callint( 0xaf );
  191.     MTL_setFlagObj( TIconID , MS_TOGGLE );
  192.     MMI_SendMessage(MessageID,MM_SETMSG,1,(int)"Fast  ");
  193.     //起動時は選択できる
  194. //    MMI_SendMessage( DialogID, MM_ENABLE, 1, TRUE);
  195.  
  196. //    printf("表示\n");
  197.     /*    背景を表示する                            */
  198.     MMI_SendMessage(MMI_GetBaseObj(), MM_SHOW, 0) ;
  199.     sleepFlag = FALSE;
  200.  
  201.     MMI_SendMessage(MMI_GetBaseObj(), MM_SETEXEC, 1, userFunc);
  202.     MMI_CallMessage(MMI_GetApliId(), GM_TITLE, (int)RSMTITLE, 0);
  203.  
  204.     return NOERR ;
  205. }
  206.  
  207. /*    initDataGUI:TIconID:MJ_TICONL40の呼び出し関数    */
  208. int    TIconFunc(kobj, messId, argc, pev, trigger)
  209. int        kobj ;
  210. int        messId ;
  211. int        argc ;
  212. EVENT    *pev ;
  213. int        trigger ;
  214. {
  215.     mode = 1 - mode;
  216.     if( trigger & MS_EVKEYONL40 ){
  217.         if(mode == 0) MTL_resetFlagObj( TIconID , ~(MS_TOGGLE) );
  218.             else      MTL_setFlagObj( TIconID , MS_TOGGLE );
  219. //        printf("S.KEY\n");
  220.         MMI_SendMessage( TIconID , MM_SHOW , 0);
  221.     }
  222.  
  223.     MMI_SendMessage(MessageID,MM_SETMSG,1,
  224.                                 (int)( (mode==0) ? "Normal" : "Fast  "));
  225.     MMI_SendMessage(MessageID,MM_SHOW,0);
  226.  
  227.     Registers.AX.LH.H = 0x08 ;
  228.     Registers.AX.LH.L = mode ;
  229.     callint( 0xaf );
  230.     return NOERR ;
  231. }
  232.  
  233. /*    initDataGUI:IconID:MJ_ICONL40の呼び出し関数    */
  234. int    quitFunc(kobj, messId, argc, pev, trigger)
  235. int        kobj ;
  236. int        messId ;
  237. int        argc ;
  238. EVENT    *pev ;
  239. int        trigger ;
  240. {
  241.     MMI_SetHaltFlag( TRUE );
  242.     quitFuncRet = NOERR ;
  243.     return NOERR ;
  244. }
  245.  
  246. int APL_end()
  247. {
  248.     /*===================================================================*/
  249.     /* リジューム情報更新 (※がついた処理は必ず行って下さい)             */
  250.     /*===================================================================*/
  251.     char    work[RSMWORKSIZE];
  252.     char    buf[200];
  253.     char    aplpath[128];
  254.     HYPER    hyp;
  255.     register int ret;
  256.     
  257.     // 枠座標を得る
  258.     MMI_SendMessage( DialogID, MM_GETHYPER, 1, &hyp );
  259.     
  260.     // 移動していたらセーブ
  261.     if ( (RSM_FRAME.lupx  != hyp.fr.lupx) ||
  262.          (RSM_FRAME.lupy  != hyp.fr.lupy) ){
  263.         // マネージャ初期化
  264.         EIN_rsmInit( work, RSMID );
  265.         // バッファ設定(アプリ識別ID,更新時刻は自動設定されます)
  266.         EIN_rsmBufSet( work, buf, 200 );
  267.         // アプリディレクトリ保存
  268.         MMI_CallMessage( MMI_GetApliId(), GM_QUERYID, QM_PATH, (int)aplpath );
  269.         EIN_rsmBufPrintf( work, "APLPATH: %s", aplpath );
  270.         // アプリ名保存
  271.         EIN_rsmBufPrintf( work, "TITLE:   %s", RSMTITLE );
  272.         // コメント保存
  273.         EIN_rsmBufCat( work, "COMMENT: 動作モードを切り換える事しかできない能無しです。常駐する意味無し。");
  274.         // アイコン位置保存
  275.         EIN_rsmBufPrintf( work, "PANEL: %d %d", hyp.fr.lupx, hyp.fr.lupy );
  276.         // バッファ終端(^A)設定
  277.         EIN_rsmBufTail( work );
  278.         // バッファをセーブ
  279.         ret = EIN_rsmSave( work );
  280.         #ifdef DEBUG
  281.         printf(" resume save size(%d)   ptr:(%d,%d)\n",ret, hyp.fr.lupx, hyp.fr.lupy);
  282.         #endif
  283.     }
  284.  
  285.     return NOERR ;
  286. }
  287.